--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LXST/Generators.py bfe563f6a5448d2a35b9133c29bae116c9d4171d (bfe563f6) Text, 5.49 KB
Tff7b72import T7ee787os
Tff7b72import T7ee787RNS
Tff7b72import T7ee787math
Tff7b72import T7ee787time
Tff7b72import T7ee787threading
Tff7b72import T7ee787numpy Tff7b72as T7ee787np
Tff7b72from T7ee787collections Tff7b72import Te6edf3deque
Tff7b72from T7ee787.T7ee787Codecs Tff7b72import Te6edf3CodecTb4b4b4, Te6edf3CodecError
Tff7b72from T7ee787.T7ee787Sources Tff7b72import Te6edf3LocalSource
Tff7b72class T56d364ToneSourceTb4b4b4(Te6edf3LocalSourceTb4b4b4)Tb4b4b4:
Te6edf3DEFAULT_FRAME_MS Tff7b72= T79c0ff80
Te6edf3DEFAULT_SAMPLERATE Tff7b72= T79c0ff48000
Te6edf3DEFAULT_FREQUENCY Tff7b72= T79c0ff400
Te6edf3EASE_TIME_MS Tff7b72= T79c0ff20
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frequencyTff7b72=Te6edf3DEFAULT_FREQUENCYTb4b4b4, Te6edf3gainTff7b72=T79c0ff0.1Tb4b4b4, Te6edf3easeTff7b72=Tff7b72TrueTb4b4b4, Te6edf3ease_time_msTff7b72=Te6edf3EASE_TIME_MSTb4b4b4,
Te6edf3target_frame_msTff7b72=Te6edf3DEFAULT_FRAME_MSTb4b4b4, Te6edf3codecTff7b72=Tff7b72NoneTb4b4b4, Te6edf3sinkTff7b72=Tff7b72NoneTb4b4b4, Te6edf3channelsTff7b72=T79c0ff1Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftarget_frame_ms Tff7b72= Te6edf3target_frame_ms
Tff7b72selfTff7b72.Td2a8ffsamplerate Tff7b72= Tff7b72selfTff7b72.Td2a8ffDEFAULT_SAMPLERATE
Tff7b72selfTff7b72.Td2a8ffchannels Tff7b72= Te6edf3channels
Tff7b72selfTff7b72.Td2a8ffbitdepth Tff7b72= T79c0ff32
Tff7b72selfTff7b72.Td2a8fffrequency Tff7b72= Te6edf3frequency
Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72= Te6edf3gain
Tff7b72selfTff7b72.Td2a8ffgain Tff7b72= Tff7b72selfTff7b72.Td2a8ff_gain
Tff7b72selfTff7b72.Td2a8ffease Tff7b72= Te6edf3ease
Tff7b72selfTff7b72.Td2a8fftheta Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffease_time_ms Tff7b72= Te6edf3ease_time_ms
Tff7b72selfTff7b72.Td2a8ffease_step Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffgain_step Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffeasing_out Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffgenerate_thread Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffgenerate_lock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffLockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_codec Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffcodec Tff7b72= Te6edf3codec
Tff7b72selfTff7b72.Td2a8ffsink Tff7b72= Te6edf3sink
Tf0883e@property
Tff7b72def Td2a8ffcodecTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_codec
Tf0883e@codecTff7b72.Td2a8ffsetter
Tff7b72def Td2a8ffcodecTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3codecTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3codec Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_codec Tff7b72= Tff7b72None
Tff7b72elif Tff7b72not Tffa657issubclassTb4b4b4(Tffa657typeTb4b4b4(Te6edf3codecTb4b4b4)Tb4b4b4, Te6edf3CodecTb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3CodecErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffInvalid codec specified for Tffd700{Tff7b72selfTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_codec Tff7b72= Te6edf3codec
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffpreferred_samplerateTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsamplerate Tff7b72= Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffpreferred_samplerate
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_quanta_msTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftarget_frame_msTff7b72%Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_quanta_ms Tff7b72!= T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftarget_frame_ms Tff7b72= Te6edf3mathTff7b72.Td2a8ffceilTb4b4b4(Tff7b72selfTff7b72.Td2a8fftarget_frame_msTff7b72/Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_quanta_msTb4b4b4)Tff7b72*Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_quanta_ms
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTffd700}Ta5d6ff target frame time quantized to Tffd700{Tff7b72selfTff7b72.Td2a8fftarget_frame_msTffd700}Ta5d6ffms due to codec frame quantaTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_max_msTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftarget_frame_ms Tff7b72> Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_max_msTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftarget_frame_ms Tff7b72= Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_max_ms
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTffd700}Ta5d6ff target frame time clamped to Tffd700{Tff7b72selfTff7b72.Td2a8fftarget_frame_msTffd700}Ta5d6ffms due to codec frame limitTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffvalid_frame_msTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8fftarget_frame_ms Tff7b72in Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffvalid_frame_msTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftarget_frame_ms Tff7b72= Tffa657minTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffvalid_frame_msTb4b4b4, Te6edf3keyTff7b72=Tff7b72lambda Te6edf3tTb4b4b4:Tffa657absTb4b4b4(Te6edf3tTff7b72-Tff7b72selfTff7b72.Td2a8fftarget_frame_msTb4b4b4)Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTffd700}Ta5d6ff target frame time clamped to closest valid value of Tffd700{Tff7b72selfTff7b72.Td2a8fftarget_frame_msTffd700}Ta5d6ffms Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsamples_per_frame Tff7b72= Te6edf3mathTff7b72.Td2a8ffceilTb4b4b4(Tb4b4b4(Tff7b72selfTff7b72.Td2a8fftarget_frame_msTff7b72/T79c0ff1000Tb4b4b4)Tff7b72*Tff7b72selfTff7b72.Td2a8ffsamplerateTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframe_time Tff7b72= Tff7b72selfTff7b72.Td2a8ffsamples_per_frameTff7b72/Tff7b72selfTff7b72.Td2a8ffsamplerate
Tff7b72selfTff7b72.Td2a8ffease_step Tff7b72= T79c0ff1Tff7b72/Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffsamplerateTff7b72*Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffease_time_msTff7b72/T79c0ff1000Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffgain_step Tff7b72= T79c0ff0.02Tff7b72/Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffsamplerateTff7b72*Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffease_time_msTff7b72/T79c0ff1000Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffshould_runTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTffd700}Ta5d6ff starting at Tffd700{Tff7b72selfTff7b72.Td2a8ffsamples_per_frameTffd700}Ta5d6ff samples per frame, Tffd700{Tff7b72selfTff7b72.Td2a8ffchannelsTffd700}Ta5d6ff channelsTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72= T79c0ff0 Tff7b72if Tff7b72selfTff7b72.Td2a8ffease Tff7b72else T79c0ff1
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffgenerate_thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff__generate_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffgenerate_threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffeaseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffeasing_out Tff7b72= Tff7b72True
Tf0883e@property
Tff7b72def Td2a8ffrunningTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffeasing_out
Tff7b72def Td2a8ff__generateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3frame_samples Tff7b72= Te6edf3npTff7b72.Td2a8ffzerosTb4b4b4(Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffsamples_per_frameTb4b4b4, Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4)Tb4b4b4, Te6edf3dtypeTff7b72=Ta5d6ff"Ta5d6fffloat32Ta5d6ff"Tb4b4b4)
Te6edf3step Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8fffrequency Tff7b72* T79c0ff2 Tff7b72* Te6edf3mathTff7b72.Td2a8ffpiTb4b4b4) Tff7b72/ Tff7b72selfTff7b72.Td2a8ffsamplerate
Tff7b72for Te6edf3n Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffsamples_per_frameTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftheta Tff7b72+Tff7b72= Te6edf3step
Te6edf3amplitude Tff7b72= Te6edf3mathTff7b72.Td2a8ffsinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffthetaTb4b4b4)Tff7b72*Tff7b72selfTff7b72.Td2a8ff_gainTff7b72*Tff7b72selfTff7b72.Td2a8ffease_gain
Tff7b72for Te6edf3c Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4)Tb4b4b4:
Te6edf3frame_samplesTb4b4b4[Te6edf3nTb4b4b4, Te6edf3cTb4b4b4] Tff7b72= Te6edf3amplitude
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgain Tff7b72> Tff7b72selfTff7b72.Td2a8ff_gainTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffgain_step
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72> Tff7b72selfTff7b72.Td2a8ffgainTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72= Tff7b72selfTff7b72.Td2a8ffgain
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgain Tff7b72< Tff7b72selfTff7b72.Td2a8ff_gainTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72-Tff7b72= Tff7b72selfTff7b72.Td2a8ffgain_step
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72< Tff7b72selfTff7b72.Td2a8ffgainTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72= Tff7b72selfTff7b72.Td2a8ffgain
Tff7b72if Tff7b72selfTff7b72.Td2a8ffeaseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72< T79c0ff1.0 Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffeasing_outTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffease_step
Tff7b72if Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72> T79c0ff1.0Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72= T79c0ff1.0
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffeasing_out Tff7b72and Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72> T79c0ff0.0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72-Tff7b72= Tff7b72selfTff7b72.Td2a8ffease_step
Tff7b72if Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72<Tff7b72= T79c0ff0.0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72= T79c0ff0.0
Tff7b72selfTff7b72.Td2a8ffeasing_out Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72False
Tff7b72return Te6edf3frame_samples
Tff7b72def Td2a8ff__generate_jobTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffgenerate_lockTb4b4b4:
Tff7b72while Tff7b72selfTff7b72.Td2a8ffshould_runTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcodec Tff7b72and Tff7b72selfTff7b72.Td2a8ffsink Tff7b72and Tff7b72selfTff7b72.Td2a8ffsinkTff7b72.Td2a8ffcan_receiveTb4b4b4(Te6edf3from_sourceTff7b72=Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3frame_samples Tff7b72= Tff7b72selfTff7b72.Td2a8ff__generateTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflast_samples Tff7b72= Te6edf3frame_samples
Te6edf3frame Tff7b72= Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffencodeTb4b4b4(Te6edf3frame_samplesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsinkTff7b72.Td2a8ffhandle_frameTb4b4b4(Te6edf3frameTb4b4b4, Tff7b72selfTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffframe_timeTff7b72*T79c0ff0.1Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────